#include <bits/stdc++.h>
using namespace std;

map<int, long long> mp; // 用于存储区间和的出现次数
int s[4001];            // 字符串转换成的数字数组

int main() {
  int T;     // 目标和
  string SS; // 输入的字符串
  cin >> T >> SS;
  int n = SS.size(); // 字符串的长度

  // 将字符串转换成数字数组
  for (int i = 0; i < n; i++) {
    s[i + 1] = SS[i] - '0';
  }

  long long zero = 0; // 统计区间和为0的个数

  // 计算前缀和
  for (int i = 1; i <= n; i++) {
    s[i] += s[i - 1];
  }

  // 求所有i到j区间和
  for (int i = 1; i <= n; i++) {
    for (int j = i; j <= n; j++) {
      int sum = s[j] - s[i - 1]; // 计算区间和
      if (sum > T)               // 如果区间和大于T，后续的都不用统计了
        break;
      if (T == 0 && sum == 0) { // 统计区间和为0的个数
        zero++;
      }
      if (sum != 0 && T % sum == 0) { // 如果区间和为T的因数，统计个数
        mp[sum]++;
      }
    }
  }

  long long ans = 0; // 最终结果

  if (T == 0) { // 特殊情况处理：T为0
    // 所有的可能数 (n*(n+1)/2) ,2倍后，即 n*（n+1）
    ans = zero * n * (n + 1) - zero * zero;
    cout << ans;
    return 0;
  }

  // 枚举T的所有因数
  for (int i = 1; i * i <= T; i++) {
    if (T % i == 0) {
      // 统计所有i和T/i的区间和的个数，相乘即为所有子矩阵的个数
      if (i != T / i) {
        ans += 2 * mp[i] * mp[T / i];
      } else {
        ans += mp[i] * mp[T / i];
      }
    }
  }

  cout << ans; // 输出结果
  return 0;
}